package zjh_20230329;

import java.io.*;

public class FileCutter {
    /**
     * 将指定文件切割为不超过 size 大小的 N 份后，依次序放入到 directory 目录中
     *
     * @param original  被拆分的原始文件
     * @param size      表示被拆分后的单个文件的最大体积
     * @param directory 表示将拆分后的多个文件放入到哪个目录中
     * @return 返回切割后的文件数目
     */
    public int split(final File original, final long size, final File directory) {
        // 表示拆分后文件个数的变量n
        try (FileInputStream fileInputStream = new FileInputStream(original);) {
            byte[] bytes = new byte[(int) size];
            int length = 0;

            int i = 1;
            while ((length = fileInputStream.read(bytes)) > 0) {
                File file = new File(directory, original.getName() + "." + i++);
                try (FileOutputStream fileOutputStream = new FileOutputStream(file, true)) {
                    fileOutputStream.write(bytes, 0, length);
                }
            }
            System.out.println("完成");
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        int n = 0;
        // 返回拆分后的文件个数
        return n;
    }

    public static void main(String[] args) {
        FileCutter fc = new FileCutter();
        // 被拆分的文件
        File f = new File("D:\\kaifamiao\\test-spilt.png");
        // 表示每个文件体积最大为20kB
        long size = 1024 * 20;
        // 拆分后的小文件的存放目录
        File dir = new File("D:\\kaifamiao\\homework-resultset");
        // 将 f 对应的文件拆分成 N 份，每一份大小 至多 20MB，并将拆分后的文件依次序放入到 dir 对应的目录中
        fc.split(f, size, dir);
//        System.out.println(f.length());
    }

}
